package com.order.manager.service.impl;

import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod;
import com.order.manager.Model.SenderExamineInfo;
import com.order.manager.Model.SenderInfo;
import com.order.manager.mapper.SenderInfoMapper;
import com.order.manager.service.SenderInfoService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 24862
 * @description 针对表【sender_info】的数据库操作Service实现
 * @createDate 2024-04-08 15:32:30
 */
@Service
public class SenderInfoServiceImpl extends ServiceImpl<SenderInfoMapper, SenderInfo>
        implements SenderInfoService {

    /**
     * 配送员信息数据访问对象
     */
    @Resource
    SenderInfoMapper senderInfoMapper;

    /**
     * 配送员审核信息服务
     */
    @Resource
    SenderExamineInfoServiceImpl senderExamineInfoService;

    /**
     * 用户信息服务
     */
    @Resource
    UserInfoServiceImpl userInfoService;

    /**
     * 按校区查询配送员列表（分页）
     *
     * @param page 页码
     * @param item 每页数量
     * @return 分页包装的配送员信息列表，其中userId字段被替换为用户完整信息的JSON字符串
     *
     * @implNote 实现逻辑：
     * 1. 使用PageHelper开启分页
     * 2. 查询所有配送员信息（未添加校区过滤条件，实际可能需根据业务调整）
     * 3. 遍历配送员列表，将userId字段替换为用户完整信息的JSON字符串
     * 4. 返回分页结果
     *
     * @apiNote 注意：当前实现未添加校区过滤条件，
     *          可能需要根据实际业务逻辑补充校区查询条件
     */
    @Override
    //PageInfo查询结果分页展示
    public PageInfo<SenderInfo> queryBySchool(int page, int item) {
        // 开启分页功能，设置当前页码和每页显示数量
        PageMethod.startPage(page, item);

        // 查询所有配送员信息（未添加校区过滤条件）
        List<SenderInfo> senderInfos = senderInfoMapper.selectList(null);

        // 将配送员的userId字段替换为用户完整信息的JSON字符串
        for (SenderInfo sender : senderInfos) {
            // 根据配送员的userId查询用户完整信息并转换为JSON
            sender.setUserId(JSON.toJSONString(userInfoService.getById(sender.getUserId())));
        }
        // new PageInfo<>(orderForSenders) 会自动：
        //获取当前页数据（orderForSenders）
        //计算总记录数（通过执行 SELECT COUNT(*)）
        //计算总页数、当前页码等信息
        return new PageInfo<>(senderInfos);
    }
}